#include "BspHelper.h"

#include <stdbool.h>

#include "ClkInitHelper.h"
#include "GpioInitHelper.h"
#include "IntcInitHelper.h"
#include "UsartInitHelper.h"
#include "DmaInitHelper.h"
#include "RtcInitHelper.h"
#include "ClkTimerInitHelper.h"
#include "TrngInitHelper.h"
#include "OtsInitHelper.h"
#include "I2cInitHelper.h"
#include "SpiInitHelper.h"
#include "NmiHelper.h"


/*******************************************************************************
 * Global variable definitions (declared in header file with 'extern')
 ******************************************************************************/
// 初始化缓冲区

// 板子初始化。不要随意调整初始化顺序，可能会出错
void Bsp_Init(void) {
  /* Register write unprotected for some required peripherals. */
  LL_PERIPH_WE(LL_PERIPH_ALL);

  //Port Config
  App_PortCfg();

  /** \brief 开始校准内部时钟
	*
	*/
  //CLK_LrcTrim(10);
  //CLK_HrcTrim(5);
  /* 开始校准内部时钟 */

  //Clock Config
  App_ClkCfg();

  //  if (BSP_XTAL32_Init() != LL_OK) {
  //    for (;;) { ; }
  //  }

  (void) SysTick_Init(1000U);
	
//	{ // trace
//		CLK_SetTpiuClockDiv(CLK_TPIUCLK_DIV4); 
//		CLK_TpiuClockCmd(ENABLE);
//		DBGC_TraceIoCmd(ENABLE);
//	} // trace
  
  // 因为常用，所以全局打开
  /* DMA1 FCG enable */
  FCG_Fcg0PeriphClockCmd(FCG0_PERIPH_DMA1, ENABLE);
  /* DMA1 FCG enable */
  FCG_Fcg0PeriphClockCmd(FCG0_PERIPH_DMA2, ENABLE);
  /* AOS FCG enable */
  FCG_Fcg0PeriphClockCmd(FCG0_PERIPH_AOS, ENABLE);

  // nmi Config
  //NMI_FALLING_Init();
  //Int Config
  App_IntCfg();


  //Timer Config
  //App_Timer0Cfg();
	App_TimerACfg();
  SWDT_FeedDog();

  //I2Cx Config
  App_I2CxCfg();
  SWDT_FeedDog();

  //USARTx Config
  App_USARTxCfg();
  SWDT_FeedDog();

  //Dma Config
  App_DmaCfg();
  SWDT_FeedDog();

  //RTC Config
  App_RTCCfg();
  SWDT_FeedDog();

  // OTS Config
  OtsInitConfig();
  SWDT_FeedDog();

  Trng_Init();
  SWDT_FeedDog();
	
	//SPIx Config
	App_SPIxCfg();
	SWDT_FeedDog();
  /* Register write protected for some required peripherals. */
  LL_PERIPH_WP(LL_PERIPH_ALL);
}// Bsp_Init


